Domain Modelingの大まかな流れ
Domain Modelingの大まかな流れ
初期段階
ビジネスのDomainについて理解を深めながら、Domain Objectを探す
モデルを中心に据えてDomain Expertと議論する
Domain EventやDDDのCommandを列挙していく
ヒト/モノ/コトに分ける
immutable data modelのstep1, step2
Subdomainに分解する
この辺で、domainに対する大雑把な流れを理解した状態になる
参考
/mrsekut-book-97816805025/018 (CHAPTER1 Introducing Domain-Driven Design)~
/mrsekut-book-97816805025/040(CHAPTER 2 Understanding the Domain)~
/mrsekut-book-477419087X/115 (ドメインオブジェクトの見つけ方)
Entityを設計していく前段階
このタイミングでtable設計をするわけではない
DB Schema Driven Developmentを避ける
Entityを型で作っていくイメージに近い
Modelの流れをWorkflowで図示する
個別のEnittyから作るのではなく、Workflowを型に落とし込むことからやる
Domain Modelの解像度を上げて、Entityを量産する
Type Level Domain Modelingする
上の手順で抽出したEntityを詳細に見ていく
小さく分割したり、0から新しい概念を生み出したりする作業を行う
immutable data modelのstep3~step5
Event EntityやResource Entityの設計
2つのComplexityも意識する
個々のEntityが仕様を満たした型になるようにする
Entity同士の関係も型で記述する
Integrity
Consistency
個々の値を型で表現し、上限・下限も書く
/mrsekut-book-97816805025/052
後の手順でまだブラッシュアップすることになるので、ここで完璧なEntityを作る必要はないmrsekut.icon
いったん手が詰まったら先に進んでも良い
参考
/mrsekut-book-97816805025/092 (CHAPTER 5 Domain Modeling with Types)
/mrsekut-book-477419087X/096 (第4章 ドメインモデルの考え方で設計する)
Entity同士の関係性やlifecycleに着目してグルーピングをする
あらかたEntityを見いだせたら、Aggregateを考える
必要ならば更にPackagingする
小さくEntityを分割したあとに、Aggregate、Packageのようにグルーピングする
この順序が重要。最初からグルーピングしない
ref 「数が増える」は小さく作らないことの理由にならない
参考
/mrsekut-book-97816805025/118 (CHAPTER 6 Integrity and Consistency in the Domain)
#WIP
Entity同士を状態を確認しながら接続していく
workflow (DDD)を型で設計していく
状態を設計する
個々の文脈で完全なデータ型を定義する
/mrsekut-book-97816805025/137 (Modeling an Order as a Set of States)
個々の状態をState Machineの図で記述する
実装を進める中で洞察を深める
modelingの過程で、ドメインに対する洞察を深める
フィードバックループ、モデルと実装の行き来、Domain Expertとの認識合わせ、
また、それによるリファクタリングを繰り返すことで、
よりドメインに対する洞察を深め、それをコードに落とし込む
変更が起きやすいが部分を柔軟にする
暗黙的だった概念を明示的にしていく
/mrsekut-book-4798121967/230 (第3部 より深い洞察へ向かうリファクタリング)
/mrsekut-book-4798121967/248 (第9章 暗黙的な概念を明示的にする)
table設計を行う
これ、度のタイミングでやるのが良いんだ
別にこれを先にやる必要もないのか?mrsekut.icon
むしろ後にやるべき?
そう。
永続化の実装を後回しにする
Class Deriven Developmentを避ける
UMLでDomain Modelingするのを避ける
ドメイン分析はclass図の方がやりやすく、
どれがあれば割と自明にtable設計は機械的にやっていけるし
immutable data modelも意識する
非依存関係を交差Entityで表現する
DBのtableの設計
tableの設計を考えると、永続性を意識することになるので、より状態に敏感になれそう
だから、Domein modelingが行き詰まったら、途中でtable設計をすることで、思考が進むmrsekut.icon
Domain Modelを実装に落とし込む
memo
Type Level Domain Modeling
参考
/mrsekut-book-477419087X/107
https://qiita.com/kazuis/items/36d9e8eaf84cb0dec329